package com.macro.mall.runner;

import com.macro.mall.common.api.EsIndexDto;
import com.macro.mall.remote.EsProductRemote;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.stereotype.Component;

import java.io.InputStream;
import java.nio.charset.StandardCharsets;

/**
 * @Author：MinxiaoHao
 * @Description:
 * @name：EsIndexMappingRunner
 * @Date：2024/10/17 15:17
 */
@Component
@Slf4j
public class EsIndexMappingRunner implements ApplicationRunner {

    @Autowired
    private EsProductRemote esDocRemote;

    @Override
    public void run(ApplicationArguments args)  {
        //判断索引是否存在
        Boolean product = (Boolean) esDocRemote.exists("product").getData();
        if (product) {
            log.info("索引已存在，无需创建");
            return;
        }
        log.info("开始创建ES索引");

        // 读取 resources 下的 JSON 文件
        try (InputStream inputStream = getClass().getClassLoader().getResourceAsStream("product.json")) {
            if (inputStream == null) {
                log.error("未找到 JSON 文件");
                return;
            }
            // 将 InputStream 的内容转换为字符串
            String jsonContent = new String(inputStream.readAllBytes(), StandardCharsets.UTF_8);

            log.info("=================="+jsonContent);

            EsIndexDto esIndexDto = new EsIndexDto();
            esIndexDto.setIndexName("product");
            esIndexDto.setIndexMappings(jsonContent);
            // 将数据添加到 Elasticsearch
            esDocRemote.createIndex(esIndexDto);
            log.info("初始化成功,索引创建完毕");
        } catch (Exception e) {
            log.error("读取或处理 JSON 文件时发生错误", e);
        }
    }



}
